package com.itheima.advance.reflect.demo01;

/**
 * 如何去获取一个类所对应字节码文件对象
 * 1. 使用类中的静态的class属性进行获取
 * 2. 调用Obejct类中的方法getClass方法：          public final Class getClass​()
 * 3. 使用Class类中的静态方法forName方法进行获取：  public static Class<?> forName​(String className)
 */
public class ReflectDemo01 {

    public static void main(String[] args) throws ClassNotFoundException {

        // 1. 使用类中的静态的class属性进行获取
        Class<Student> studentClazz1 = Student.class;
        System.out.println(studentClazz1);

        Class<Student> studentClazz2 = Student.class;
        System.out.println(studentClazz2);

        // true , 因为我们一个类的字节码文件仅仅是一个，那么在把这个字节码文件加载到内存的时候，对我们这个字节码文件只需要去生成一个Class对象对其进行描述就可以了
        System.out.println(studentClazz1 == studentClazz2 );

        System.out.println("---------------------------------------------------------------------");

        //  2. 调用Obejct类中的方法getClass方法：          public final Class getClass​()
        Student s = new Student() ;
        Class studentClazz3 = s.getClass();
        System.out.println(studentClazz1 == studentClazz3 );

        System.out.println("---------------------------------------------------------------------");

        // 3. 使用Class类中的静态方法forName方法进行获取：  public static Class<?> forName​(String className)
        Class studentClazz4 = Class.forName("com.itheima.advance.reflect.demo01.Student");
        System.out.println(studentClazz1 == studentClazz4 );

    }

}
